UnOfficial gpSP kai
-- gameplaySP Gameboy Advance emulator for Playstation Portable --

frame skipについての考察
なるべく正確なオートフレームスキップと、まともなターボモード実装を検討してみる
現在の図は画面表示周りだけだが、サウンドの流れも追加する予定

gpSPの1frameの基本的な流れは、以下のようになる(厳密には約1/60秒)
      +-+------------------------------+ ここで T = 0
      | | 前処理                       |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |
      | +------------------------------+ |228ライン分繰り返す
1/60秒| | スキャンラインごとの表示処理 | |
      | +------------------------------+-+
      | | 後処理                       |
      | +------------------------------+ ここで dT を計測
      | | ウェイト処理                 | (1/60-dT)ウェイト
      +-+------------------------------+
※ウェイトの計測がポイントだと思われる


frame skip = 0/auto skip = off/wait = on
処理が間に合っているとき
      +-+------------------------------+
      | | 前処理                       |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |
      | +------------------------------+ |228ライン分繰り返す
1/60秒| | スキャンラインごとの表示処理 | |
      | +------------------------------+-+
      | | 後処理                       |
      | +------------------------------+
      | | ウェイト処理                 |
      +-+------------------------------+
      | | 前処理                       |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |
      | +------------------------------+ |228ライン分繰り返す
1/60秒| | スキャンラインごとの表示処理 | |
      | +------------------------------+-+
      | | 後処理                       |
      | +------------------------------+
      | | ウェイト処理                 |
      +-+------------------------------+

処理落ちが発生した場合
      +-+------------------------------+
      | | 前処理                       |
      | |                              |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |
1/60秒| |                              | |
      | |                              | |
      | +------------------------------+ |228ライン分繰り返す
      | | スキャンラインごとの表示処理 | |
      | |                              | |
      +-+                              | |
 遅延   +------------------------------+-+
        | 後処理                       |
      +-+------------------------------+
      | | 前処理                       |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |
      | +------------------------------+ |228ライン分繰り返す
1/60秒| | スキャンラインごとの表示処理 | |
      | +------------------------------+-+
      | | 後処理                       |
      | +------------------------------+
      | | ウェイト処理                 |
      +-+------------------------------+

frame skip = 1/auto skip = off/wait = on
処理が間に合っているとき
      +-+------------------------------+
      | | 前処理                       |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |
      | +------------------------------+ |228ライン分繰り返す
1/60秒| | スキャンラインごとの表示処理 | |
      | +------------------------------+-+
      | | 後処理                       |
      | +------------------------------+
      | | ウェイト処理                 |
      +-+------------------------------+
      | | 前処理                       |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |228ライン分繰り返す
      | +------------------------------+-+
1/60秒| | 後処理                       |
      | +------------------------------+
      | |                              |
      | | ウェイト処理                 |
      | |                              |
      +-+------------------------------+

処理落ちが発生した場合
      +-+------------------------------+
      | | 前処理                       |
      | |                              |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |
1/60秒| |                              | |
      | |                              | |
      | +------------------------------+ |228ライン分繰り返す
      | | スキャンラインごとの表示処理 | |
      | |                              | |
      +-+                              | |
 遅延   +------------------------------+-+
        | 後処理                       |
      +-+------------------------------+
      | | 前処理                       |
      | +------------------------------+-+
      | | スキャンラインごとの内部処理 | |228ライン分繰り返す
      | +------------------------------+-+
1/60秒| | 後処理                       |
      | +------------------------------+
      | |                              |
      | | ウェイト処理                 |
      | |                              |
      +-+------------------------------+

